package com.j2203.utils;

import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;

@Component
public class RedisWorker {

    @Resource(type = StringRedisTemplate.class)
    private  StringRedisTemplate stringRedisTemplate;

    //2022年1月1日0时0分0秒的时间long值
    private static final long time= 1640995200;

    //时间戳要移动的位数
    private static final int num = 32;


    public Long orderId (String keyPrefix){
     //拿到当前时间和2022年1月1日0时0分0秒 的差值时间戳
        LocalDateTime now = LocalDateTime.now();
        long second = now.toEpochSecond(ZoneOffset.UTC);
        long t = second - time;

     //生成序列号
        //获取当前日期精确到天
        String date = now.format(DateTimeFormatter.ofPattern("YY:MM:dd"));
        //自增 为拼接订单编号做准备
        Long increment = stringRedisTemplate.opsForValue().increment("icr" + keyPrefix + ":" + date);

        return t << num | increment;
    }


//    public static void main(String[] args) {
//        LocalDateTime now = LocalDateTime.now();
//
//        //2022年1月1日0时0分0秒的时间long值
//        LocalDateTime time =  LocalDateTime.of(2022,1,1,0,0,0);
//        long l = time.toEpochSecond(ZoneOffset.UTC);
//        //L=1640995200
//        System.out.println(l);
//
//        System.out.println("-------------");
//        Long jj = orderId("aa");
//        System.out.println(jj);
//    }
}
